Deadpool for PostgreSQL
Deadpool is a dead simple async pool for connections and objects of any type.
This crate implements a deadpool
manager for tokio-postgres
and also provides a statement
cache by wrapping tokio_postgres::Client
and tokio_postgres::Transaction
.
Features
Feature | Description | Extra dependencies | Default |
---|---|---|---|
rt_tokio_1 |
Enable support for tokio crate | deadpool/rt_tokio_1 |
yes |
rt_async-std_1 |
Enable support for async-std crate | deadpool/rt_async-std_1 |
no |
serde |
Enable support for serde crate | deadpool/serde , serde/derive |
no |
Important: async-std
support is currently limited to the
async-std
specific timeout function. You still need to enable
the tokio1
feature of async-std
in order to use this crate
with async-std
.
Example
use ;
use NoTls;
async
Example with config
and dotenv
crate
# .env
PG__DBNAME=deadpool
use ;
use dotenv;
# use serde_1 as serde;
use NoTls;
#
async
Note: The code above uses the crate name config_crate
because of the
config
feature and both features and dependencies share the same namespace.
In your own code you will probably want to use ::config::ConfigError
and
::config::Config
instead.
Example using an existing tokio_postgres::Config
object
use env;
use ;
use NoTls;
async
FAQ
-
The database is unreachable. Why does the pool creation not fail?
Deadpool has identical startup and runtime behaviour and therefore the pool creation will never fail.
If you want your application to crash on startup if no database connection can be established just call
pool.get().await
right after creating the pool. -
Why are connections retrieved from the pool sometimes unuseable?
In
deadpool-postgres 0.5.5
a new recycling method was implemented which is the default since0.8
. With that recycling method the manager no longer performs a test query prior returning the connection but relies solely ontokio_postgres::Client::is_closed
instead. Under some rare circumstances (e.g. unreliable networks) this can lead totokio_postgres
not noticing a disconnect and reporting the connection as useable.The old and slightly slower recycling method can be enabled by setting
ManagerConfig::recycling_method
toRecyclingMethod::Verified
or when using theconfig
crate by settingPG__MANAGER__RECYCLING_METHOD=Verified
. -
How can I enable features of the
tokio-postgres
crate?Make sure that you depend on the same version of
tokio-postgres
asdeadpool-postgres
does and enable the needed features in your ownCrate.toml
file:[] = { = "0.9" } = { = "0.7", = ["with-uuid-0_8"] }
Important: The version numbers of
deadpool-postgres
andtokio-postgres
do not necessarily match. If they do it is just a coincidence that both crates have the same MAJOR and MINOR version number. -
How can I clear the statement cache?
You can call
pool.manager().statement_cache.clear()
to clear all statement caches orpool.manager().statement_cache.remove()
to remove a single statement from all caches.Important: The
ClientWrapper
also provides astatement_cache
field which hasclear()
andremove()
methods which only affect a single client.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.